import requests
import base64
from PIL import Image
from io import BytesIO
import json
from vosk import Model, KaldiRecognizer
import wave

XUNFEI_CHAT_URL = "https://edu.lebaokids.com/platform/openapi/get_xunfei_chat"
XUNFEI_IMAGE_URL = "https://edu.lebaokids.com/platform/openapi/get_xunfei_image_data"


#将base64 的图片数据存在本地
def base64_to_image(base64_data, save_path):
    # 解码base64数据
    img_data = base64.b64decode(base64_data)
    # 将解码后的数据转换为图片
    img = Image.open(BytesIO(img_data))
    # 保存图片到本地
    img.save(save_path)


def get_xunfei_chat(name, length, app_id, app_key, app_secret, llm_domain):
	keywords = {
		"好处": "喝茶作为一种历史悠久的健康饮品，其益处已得到现代科学的多方面验证. 主要有抗氧化防衰老，心血管保护，代谢调节，神经保护",
		"龙井": "",
		"红茶": "",
		"香茶": "",
		"白茶": "",
		"中国": "",
	}
	for k, v in keywords.items():
		if k in name:
			return v

	data = {
		"name": name, 
		"length": length, 
		"app_id": app_id, 
		"app_key": app_key, 
		"app_secret": app_secret, 
		"llm_domain": llm_domain,
	}
	print(data)
	resp = requests.get(XUNFEI_CHAT_URL, params=data)
	print(resp.status_code)
	print(resp.text)
	res = resp.json()
	print(res.get("result", ""))
	result = res.get("result", "")
	return result


def voice_to_words(file=None):
	# 语音转文字
    # 加载模型
    model = Model("vosk-model-small-cn-0.22")  # 替换为模型路径
    # wf = wave.open("record.wav", "rb")
    wf = wave.open(file, "rb")

    # 检查音频格式（单声道、16kHz、16位PCM）
    if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
        raise ValueError("音频格式需为单声道WAV，16位PCM编码")

    # 初始化识别器
    rec = KaldiRecognizer(model, wf.getframerate())

    # 逐帧读取并识别
    while True:
        data = wf.readframes(4000)
        if len(data) == 0:
            break
        if rec.AcceptWaveform(data):
            print("完整结果:", rec.Result())  # 最终识别结果
        else:
            print("临时结果:", rec.PartialResult())  # 部分识别结果
    result = rec.FinalResult()
    print(result)
    print("最终结果:", rec.FinalResult())  # 最后一次结果
    wf.close()
    print(type(result))
    res = json.loads(result)
    return res.get('text', '')
